//
//  AjenObject.h
//  AjenKit
//
//  Created by Ajen on 2017/8/31.
//  Copyright © 2017年 中国·北京·洵. All rights reserved.
//
//
//                       .::::.
//                     .::::::::.
//                    ::::Ajen:::
//                 ..:::::::::::'
//              '::::::::::::'
//                .::::::::::
//           '::::::::::::::..
//                 .::::::::::::.
//                ::::::::::::::::
//               ::::``:::::::::'        .:::.
//              ::::'   ':::::'       .::::::::.
//            .::::'      ::::     .:::::::'::::.
//           .:::'       :::::  .:::::::::' ':::::.
//          .::'        :::::.:::::::::'      ':::::.
//         .::'         ::::::::::::::'         ``::::.
//     ...:::           ::::::::::::'              ``::.
//    ````              ':::::::::'                  ::::..
//                       '.:::::'                    ':'````..
//  [······Object拓展······]
//

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface AjenObject : NSObject
///CoreData获得数据库
+(NSManagedObjectContext *)getCoreDataContextWithDBName:(NSString *)dbName;
@end


@interface NSObject (AjenObject)

/**
 *  是否为空
 */
@property(nonatomic,readonly)BOOL aj_isNull;

/**
 *  格式化字符串
 */
@property(nonatomic,readonly)NSString * aj_changeToString;

/**
 *  格式化为Json字符串
 */
@property(nonatomic,readonly)NSString * aj_changeToJson;


/**
 *  格式化字符串
 */
- (NSString *(^)(id obj)) aj_toString;

+(NSString*)formatFloat:(float)f;

//获取该对象类的所有属性
-(NSArray *)getAllPropertyName;


@end



@interface NSString (AjenString)

/**
 *  是否为空
 */
@property(nonatomic,readonly)BOOL aj_isEmpty;

/**
 *  如果字符串未空,返回 @""
 */
@property(nonatomic,readonly)NSString * aj_formatEmpty;


/**
 *  是否为空字符串
 *
 *  @return 是/否
 */
-(BOOL)isEmptyString;

/**
 *  格式化空字符串
 *
 *  @return self/@""
 */
-(NSString*)formatEmptyString;


/**
 将float格式化未字符串 如果有两位小数不为0则保留两位小数，如果有一位小数不为0则保留一位小数，否则显示整数
 
 @param f 浮点数
 @return 字符串
 */
+(NSString *)stringWithFloat:(float)f;

@end





@interface NSArray (AjenArray)
/**
 *  插入数据至index EX: arr = arr.aj_insert(2,@"Hello,World!");
 */
- (NSArray *(^)(NSInteger index,id Obj)) aj_insert;
/**
 *  插入数据obj至index
 *
 *  @param index 目标下标
 *  @param obj   带插入对象
 *
 *  @return 可变数组
 */
- (NSArray *)AJInster:(NSInteger)index Obj:(id)obj;

/**
 *  交换数组元素位置 EX: arr = arr.aj_exchangeIndex(2,1);
 */
- (NSArray *(^)(NSInteger index_plaintiff,NSInteger index_accused)) aj_exchangeIndex;
/**
 *  交换数组元素位置
 *
 *  @param index_plaintiff 交换方
 *  @param index_accused   被交换方
 *
 *  @return 可变数组
 */
- (NSArray *)AJExchangeIndex:(NSInteger)index_plaintiff with:(NSInteger)index_accused;

/**
 *  数组内元素插队 EX: arr = arr.aj_jumpToIndex(3,0);
 */
- (NSArray *(^)(NSInteger index_start,NSInteger index_to)) aj_jumpToIndex;
/**
 *  数组内元素插队
 *
 *  @param index_start 元素
 *  @param index_to    插入位置下标
 *
 *  @return 可变数组
 */
- (NSArray *)AJJumpToIndex:(NSInteger)index_start with:(NSInteger)index_to;

/**
 *  移除下标对应元素 EX: arr = arr.aj_removeIndex(1);
 */
- (NSArray *(^)(NSInteger index)) aj_removeIndex;
/**
 *  移除下标对应元素
 *
 *  @param index 待移除元素对应下标
 *
 *  @return 可变数组
 */
- (NSArray *)AJRemoveIndex:(NSInteger)index;

/**
 *  移除一组元素对对应下标数组 EX: arr = arr.aj_removeIndexs(@[@1,@3,@4]);
 */
- (NSArray *(^)(NSArray * indexs)) aj_removeIndexs;
/**
 *  移除一组元素对应下标数组
 *
 *  @param indexs 待移除元素所对应的下标组成的数组
 *
 *  @return 可变数组
 */
- (NSArray *)AJRemoveIndexs:(NSArray *)indexs;




@end


